home *** CD-ROM | disk | FTP | other *** search
/ The Complete Utilities To…ka 501 Killer Utilities! / 501 Killer Utilities! (Macworld July 1995).cdr / Programming / metro-c-cpp-121 / C_C++_1.2.1 / INTO ‘Headers’ / INTO ‘Universal Headers’ / TextEdit.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-25  |  29.1 KB  |  712 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        TextEdit.h
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a4 Wednesday, January 25, 1995. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. */
  16.  
  17. #ifndef __TEXTEDIT__
  18. #define __TEXTEDIT__
  19.  
  20.  
  21. #ifndef __QUICKDRAW__
  22. #include <Quickdraw.h>
  23. #endif
  24. /*    #include <Types.h>                                            */
  25. /*        #include <ConditionalMacros.h>                            */
  26. /*    #include <MixedMode.h>                                        */
  27. /*    #include <QuickdrawText.h>                                    */
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. #if GENERATINGPOWERPC
  34. #pragma options align=mac68k
  35. #endif
  36.  
  37. #ifdef __CFM68K__
  38. #pragma lib_export on
  39. #endif
  40.  
  41. typedef struct TERec TERec, *TEPtr, **TEHandle;
  42.  
  43. /*
  44.     The following ProcPtrs cannot be written in or called from a high-level 
  45.     language without the help of mixed mode or assembly glue because they 
  46.     use the following parameter-passing conventions:
  47.  
  48.     typedef pascal void (*HighHookProcPtr)(const Rect *r, TEPtr pTE);
  49.     typedef pascal void (*CaretHookProcPtr)(const Rect *r, TEPtr pTE);
  50.  
  51.         In:
  52.             =>     r                        on stack
  53.             =>    pTE                        A3.L
  54.         Out:
  55.             none
  56.  
  57.     typedef pascal Boolean (*EOLHookProcPtr)(char theChar, TEPtr pTE, TEHandle hTE);
  58.  
  59.         In:
  60.             =>     theChar                    D0.B
  61.             =>    pTE                        A3.L
  62.             =>    hTE                        A4.L
  63.         Out:
  64.             <=    Boolean                    Z bit of the CCR
  65.  
  66.     typedef pascal unsigned short (*WidthHookProcPtr)(unsigned short textLen,
  67.      unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  68.     typedef pascal unsigned short (*TextWidthHookProcPtr)(unsigned short textLen,
  69.      unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  70.  
  71.         In:
  72.             =>     textLen                    D0.W
  73.             =>    textOffset                D1.W
  74.             =>    textBufferPtr            A0.L
  75.             =>    pTE                        A3.L
  76.             =>    hTE                        A4.L
  77.         Out:
  78.             <=    unsigned short            D1.W
  79.  
  80.     typedef pascal unsigned short (*NWidthHookProcPtr)(unsigned short styleRunLen,
  81.      unsigned short styleRunOffset, short slop, short direction, void *textBufferPtr, 
  82.      short *lineStart, TEPtr pTE, TEHandle hTE);
  83.  
  84.         In:
  85.             =>     styleRunLen                D0.W
  86.             =>    styleRunOffset            D1.W
  87.             =>    slop                    D2.W (low)
  88.             =>    direction                D2.W (high)
  89.             =>    textBufferPtr            A0.L
  90.             =>    lineStart                A2.L
  91.             =>    pTE                        A3.L
  92.             =>    hTE                        A4.L
  93.         Out:
  94.             <=    unsigned short            D1.W
  95.  
  96.     typedef pascal void (*DrawHookProcPtr)(unsigned short textOffset, unsigned short drawLen,
  97.      void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  98.  
  99.         In:
  100.             =>     textOffset                D0.W
  101.             =>    drawLen                    D1.W
  102.             =>    textBufferPtr            A0.L
  103.             =>    pTE                        A3.L
  104.             =>    hTE                        A4.L
  105.         Out:
  106.             none
  107.  
  108.     typedef pascal Boolean (*HitTestHookProcPtr)(unsigned short styleRunLen,
  109.      unsigned short styleRunOffset, unsigned short slop, void *textBufferPtr,
  110.      TEPtr pTE, TEHandle hTE, unsigned short *pixelWidth, unsigned short *charOffset, 
  111.      Boolean *pixelInChar);
  112.  
  113.         In:
  114.             =>     styleRunLen                D0.W
  115.             =>    styleRunOffset            D1.W
  116.             =>    slop                    D2.W
  117.             =>    textBufferPtr            A0.L
  118.             =>    pTE                        A3.L
  119.             =>    hTE                        A4.L
  120.         Out:
  121.             <=    pixelWidth                D0.W (low)
  122.             <=    Boolean                    D0.W (high)
  123.             <=    charOffset                D1.W
  124.             <=    pixelInChar                D2.W
  125.  
  126.     typedef pascal void (*TEFindWordProcPtr)(unsigned short currentPos, short caller, 
  127.      TEPtr pTE, TEHandle hTE, unsigned short *wordStart, unsigned short *wordEnd);
  128.  
  129.         In:
  130.             =>     currentPos                D0.W
  131.             =>    caller                    D2.W
  132.             =>    pTE                        A3.L
  133.             =>    hTE                        A4.L
  134.         Out:
  135.             <=    wordStart                D0.W
  136.             <=    wordEnd                    D1.W
  137.  
  138.     typedef pascal void (*TERecalcProcPtr)(TEPtr pTE, unsigned short changeLength,
  139.        unsigned short *lineStart, unsigned short *firstChar, unsigned short *lastChar);
  140.  
  141.         In:
  142.             =>     pTE                        A3.L
  143.             =>    changeLength            D7.W
  144.         Out:
  145.             <=    lineStart                D2.W
  146.             <=    firstChar                D3.W
  147.             <=    lastChar                D4.W
  148.  
  149.     typedef pascal void (*TEDoTextProcPtr)(TEPtr pTE, unsigned short firstChar, unsigned short lastChar,
  150.                          short selector, GrafPtr *currentGrafPort, short *charPosition);
  151.  
  152.         In:
  153.             =>     pTE                        A3.L
  154.             =>    firstChar                D3.W
  155.             =>    lastChar                D4.W
  156.             =>    selector                D7.W
  157.         Out:
  158.             <=    currentGrafPort            A0.L
  159.             <=    charPosition            D0.W
  160.             
  161. */
  162. typedef pascal void (*HighHookProcPtr)(const Rect *r, TEPtr pTE);
  163. typedef pascal Boolean (*EOLHookProcPtr)(char theChar, TEPtr pTE, TEHandle hTE);
  164. typedef pascal void (*CaretHookProcPtr)(const Rect *r, TEPtr pTE);
  165. typedef pascal unsigned short (*WidthHookProcPtr)(unsigned short textLen, unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  166. typedef pascal unsigned short (*TextWidthHookProcPtr)(unsigned short textLen, unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  167. typedef pascal unsigned short (*NWidthHookProcPtr)(unsigned short styleRunLen, unsigned short styleRunOffset, short slop, short direction, void *textBufferPtr, short *lineStart, TEPtr pTE, TEHandle hTE);
  168. typedef pascal void (*DrawHookProcPtr)(unsigned short textOffset, unsigned short drawLen, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  169. typedef pascal Boolean (*HitTestHookProcPtr)(unsigned short styleRunLen, unsigned short styleRunOffset, unsigned short slop, void *textBufferPtr, TEPtr pTE, TEHandle hTE, unsigned short *pixelWidth, unsigned short *charOffset, Boolean *pixelInChar);
  170. typedef pascal void (*TEFindWordProcPtr)(unsigned short currentPos, short caller, TEPtr pTE, TEHandle hTE, unsigned short *wordStart, unsigned short *wordEnd);
  171. typedef pascal void (*TERecalcProcPtr)(TEPtr pTE, unsigned short changeLength, unsigned short *lineStart, unsigned short *firstChar, unsigned short *lastChar);
  172. typedef pascal void (*TEDoTextProcPtr)(TEPtr pTE, unsigned short firstChar, unsigned short lastChar, short selector, GrafPtr *currentGrafPort, short *charPosition);
  173. /*
  174.         TEClickLoopProcPtr uses register based parameters on the 68k and cannot
  175.         be written in or called from a high-level language without the help of
  176.         mixed mode or assembly glue.
  177.  
  178.         In:
  179.          => pTE             A3.L
  180.         Out:
  181.          <= return value    Z bit of Status Register
  182. */
  183. /*
  184.         WordBreakProcPtr uses register based parameters on the 68k and cannot
  185.         be written in or called from a high-level language without the help of
  186.         mixed mode or assembly glue.
  187.  
  188.         In:
  189.          => text            A0.L
  190.          => charPos         D0.W
  191.         Out:
  192.          <= return value    Z bit of Status Register
  193. */
  194.  
  195. #if GENERATINGCFM
  196. typedef UniversalProcPtr HighHookUPP;
  197. typedef UniversalProcPtr EOLHookUPP;
  198. typedef UniversalProcPtr CaretHookUPP;
  199. typedef UniversalProcPtr WidthHookUPP;
  200. typedef UniversalProcPtr TextWidthHookUPP;
  201. typedef UniversalProcPtr NWidthHookUPP;
  202. typedef UniversalProcPtr DrawHookUPP;
  203. typedef UniversalProcPtr HitTestHookUPP;
  204. typedef UniversalProcPtr TEFindWordUPP;
  205. typedef UniversalProcPtr TERecalcUPP;
  206. typedef UniversalProcPtr TEDoTextUPP;
  207. typedef UniversalProcPtr TEClickLoopUPP;
  208. typedef UniversalProcPtr WordBreakUPP;
  209. #else
  210. typedef Register68kProcPtr HighHookUPP;
  211. typedef Register68kProcPtr EOLHookUPP;
  212. typedef Register68kProcPtr CaretHookUPP;
  213. typedef Register68kProcPtr WidthHookUPP;
  214. typedef Register68kProcPtr TextWidthHookUPP;
  215. typedef Register68kProcPtr NWidthHookUPP;
  216. typedef Register68kProcPtr DrawHookUPP;
  217. typedef Register68kProcPtr HitTestHookUPP;
  218. typedef Register68kProcPtr TEFindWordUPP;
  219. typedef Register68kProcPtr TERecalcUPP;
  220. typedef Register68kProcPtr TEDoTextUPP;
  221. typedef Register68kProcPtr TEClickLoopUPP;
  222. typedef Register68kProcPtr WordBreakUPP;
  223. #endif
  224.  
  225. struct TERec {
  226.     Rect                            destRect;
  227.     Rect                            viewRect;
  228.     Rect                            selRect;
  229.     short                            lineHeight;
  230.     short                            fontAscent;
  231.     Point                            selPoint;
  232.     short                            selStart;
  233.     short                            selEnd;
  234.     short                            active;
  235.     WordBreakUPP                    wordBreak;
  236.     TEClickLoopUPP                    clickLoop;
  237.     long                            clickTime;
  238.     short                            clickLoc;
  239.     long                            caretTime;
  240.     short                            caretState;
  241.     short                            just;
  242.     short                            teLength;
  243.     Handle                            hText;
  244.     long                            hDispatchRec;                /* added to replace recalBack & recalLines.  it's a handle anyway */
  245.     short                            clikStuff;
  246.     short                            crOnly;
  247.     short                            txFont;
  248.     Style                            txFace;                        /*txFace is unpacked byte*/
  249.     SInt8                            filler;
  250.     short                            txMode;
  251.     short                            txSize;
  252.     GrafPtr                            inPort;
  253.     HighHookUPP                        highHook;
  254.     CaretHookUPP                    caretHook;
  255.     short                            nLines;
  256.     short                            lineStarts[16001];
  257. };
  258.  
  259. enum {
  260. /* Justification (word alignment) styles */
  261.     teJustLeft                    = 0,
  262.     teJustCenter                = 1,
  263.     teJustRight                    = -1,
  264.     teForceLeft                    = -2,
  265. /* new names for the Justification (word alignment) styles */
  266.     teFlushDefault                = 0,                            /*flush according to the line direction */
  267.     teCenter                    = 1,                            /*center justify (word alignment) */
  268.     teFlushRight                = -1,                            /*flush right for all scripts */
  269.     teFlushLeft                    = -2,                            /*flush left for all scripts */
  270. /* Set/Replace style modes */
  271.     fontBit                        = 0,                            /*set font*/
  272.     faceBit                        = 1,                            /*set face*/
  273.     sizeBit                        = 2,                            /*set size*/
  274.     clrBit                        = 3,                            /*set color*/
  275.     addSizeBit                    = 4,                            /*add size mode*/
  276.     toggleBit                    = 5,                            /*set faces in toggle mode*/
  277.     toglBit                        = 5,                            /* obsolete.  use toggleBit */
  278. /* TESetStyle/TEContinuousStyle modes */
  279.     doFont                        = 1,                            /* set font (family) number*/
  280.     doFace                        = 2,                            /*set character style*/
  281.     doSize                        = 4,                            /*set type size*/
  282.     doColor                        = 8,                            /*set color*/
  283.     doAll                        = 15,                            /*set all attributes*/
  284.     addSize                        = 16                            /*adjust type size*/
  285. };
  286.  
  287. enum {
  288.     doToggle                    = 32,                            /*toggle mode for TESetStyle*/
  289. /* offsets into TEDispatchRec */
  290.     EOLHook                        = 0,                            /*[UniversalProcPtr] TEEOLHook*/
  291.     DRAWHook                    = 4,                            /*[UniversalProcPtr] TEWidthHook*/
  292.     WIDTHHook                    = 8,                            /*[UniversalProcPtr] TEDrawHook*/
  293.     HITTESTHook                    = 12,                            /*[UniversalProcPtr] TEHitTestHook*/
  294.     nWIDTHHook                    = 24,                            /*[UniversalProcPtr] nTEWidthHook*/
  295.     TextWidthHook                = 28,                            /*[UniversalProcPtr] TETextWidthHook*/
  296. /* selectors for TECustomHook */
  297.     intEOLHook                    = 0,                            /*TEIntHook value*/
  298.     intDrawHook                    = 1,                            /*TEIntHook value*/
  299.     intWidthHook                = 2,                            /*TEIntHook value*/
  300.     intHitTestHook                = 3,                            /*TEIntHook value*/
  301.     intNWidthHook                = 6,                            /*TEIntHook value for new version of WidthHook*/
  302.     intTextWidthHook            = 7,                            /*TEIntHook value for new TextWidthHook*/
  303. /* feature or bit definitions for TEFeatureFlag */
  304.     teFAutoScroll                = 0,                            /*00000001b*/
  305.     teFAutoScr                    = 0,                            /*00000001b  obsolete. use teFAutoScroll*/
  306.     teFTextBuffering            = 1,                            /*00000010b*/
  307.     teFOutlineHilite            = 2,                            /*00000100b*/
  308.     teFInlineInput                = 3,                            /*00001000b */
  309.     teFUseTextServices            = 4                                /*00010000b */
  310. };
  311.  
  312. enum {
  313. /* action for the new "bit (un)set" interface, TEFeatureFlag */
  314.     teBitClear                    = 0,
  315.     teBitSet                    = 1,                            /*set the selector bit*/
  316.     teBitTest                    = -1,                            /*no change; just return the current setting*/
  317. /*constants for identifying the routine that called FindWord */
  318.     teWordSelect                = 4,                            /*clickExpand to select word*/
  319.     teWordDrag                    = 8,                            /*clickExpand to drag new word*/
  320.     teFromFind                    = 12,                            /*FindLine called it ($0C)*/
  321.     teFromRecal                    = 16,                            /*RecalLines called it ($10)      obsolete */
  322. /*constants for identifying TEDoText selectors */
  323.     teFind                        = 0,                            /*TEDoText called for searching*/
  324.     teHighlight                    = 1,                            /*TEDoText called for highlighting*/
  325.     teDraw                        = -1,                            /*TEDoText called for drawing text*/
  326.     teCaret                        = -2                            /*TEDoText called for drawing the caret*/
  327. };
  328.  
  329. #if OLDROUTINENAMES
  330. enum {
  331.     TEBitClear                    = 0,
  332.     TEBitSet                    = 1,                            /*set the selector bit*/
  333.     TEBitTest                    = -1                            /*no change; just return the current setting*/
  334. };
  335.  
  336. #endif
  337. typedef char Chars[32001];
  338.  
  339. typedef char *CharsPtr;
  340.  
  341. typedef CharsPtr *CharsHandle;
  342.  
  343. struct StyleRun {
  344.     short                            startChar;                    /*starting character position*/
  345.     short                            styleIndex;                    /*index in style table*/
  346. };
  347. typedef struct StyleRun StyleRun;
  348.  
  349. struct STElement {
  350.     short                            stCount;                    /*number of runs in this style*/
  351.     short                            stHeight;                    /*line height*/
  352.     short                            stAscent;                    /*font ascent*/
  353.     short                            stFont;                        /*font (family) number*/
  354.     Style                            stFace;                        /*character Style*/
  355.     SInt8                            filler;                        /*stFace is unpacked byte*/
  356.     short                            stSize;                        /*size in points*/
  357.     RGBColor                        stColor;                    /*absolute (RGB) color*/
  358. };
  359. typedef struct STElement STElement;
  360.  
  361. typedef STElement TEStyleTable[1777];
  362.  
  363. typedef STElement *STPtr, **STHandle;
  364.  
  365. struct LHElement {
  366.     short                            lhHeight;                    /*maximum height in line*/
  367.     short                            lhAscent;                    /*maximum ascent in line*/
  368. };
  369. typedef struct LHElement LHElement;
  370.  
  371. typedef LHElement LHTable[8001];
  372.  
  373. typedef LHElement *LHPtr, **LHHandle;
  374.  
  375. struct ScrpSTElement {
  376.     long                            scrpStartChar;                /*starting character position*/
  377.     short                            scrpHeight;                    /*starting character position*/
  378.     short                            scrpAscent;
  379.     short                            scrpFont;
  380.     Style                            scrpFace;                    /*unpacked byte*/
  381.     SInt8                            filler;                        /*scrpFace is unpacked byte*/
  382.     short                            scrpSize;
  383.     RGBColor                        scrpColor;
  384. };
  385. typedef struct ScrpSTElement ScrpSTElement;
  386.  
  387. /* ARRAY [0..1600] OF ScrpSTElement */
  388. typedef ScrpSTElement ScrpSTTable[1601];
  389.  
  390. struct StScrpRec {
  391.     short                            scrpNStyles;                /*number of styles in scrap*/
  392.     ScrpSTTable                        scrpStyleTab;                /*table of styles for scrap*/
  393. };
  394. typedef struct StScrpRec StScrpRec;
  395.  
  396. typedef StScrpRec *StScrpPtr, **StScrpHandle;
  397.  
  398. struct NullStRec {
  399.     long                            teReserved;                    /*reserved for future expansion*/
  400.     StScrpHandle                    nullScrap;                    /*handle to scrap style table*/
  401. };
  402. typedef struct NullStRec NullStRec;
  403.  
  404. typedef NullStRec *NullStPtr, **NullStHandle;
  405.  
  406. struct TEStyleRec {
  407.     short                            nRuns;                        /*number of style runs*/
  408.     short                            nStyles;                    /*size of style table*/
  409.     STHandle                        styleTab;                    /*handle to style table*/
  410.     LHHandle                        lhTab;                        /*handle to line-height table*/
  411.     long                            teRefCon;                    /*reserved for application use*/
  412.     NullStHandle                    nullStyle;                    /*Handle to style set at null selection*/
  413.     StyleRun                        runs[8001];                    /*ARRAY [0..8000] OF StyleRun*/
  414. };
  415. typedef struct TEStyleRec TEStyleRec;
  416.  
  417. typedef TEStyleRec *TEStylePtr, **TEStyleHandle;
  418.  
  419. struct TextStyle {
  420.     short                            tsFont;                        /*font (family) number*/
  421.     Style                            tsFace;                        /*character Style*/
  422.     SInt8                            filler;                        /*tsFace is unpacked byte*/
  423.     short                            tsSize;                        /*size in point*/
  424.     RGBColor                        tsColor;                    /*absolute (RGB) color*/
  425. };
  426. typedef struct TextStyle TextStyle;
  427.  
  428. typedef TextStyle *TextStylePtr, **TextStyleHandle;
  429.  
  430. typedef short TEIntHook;
  431.  
  432.  
  433. #if GENERATINGCFM
  434. #else
  435. #endif
  436.  
  437. /* 
  438.     Important note about TEClickLoopProcPtr and WordBreakProcPtr
  439.  
  440.     At one point these were defined as returning the function result in the 
  441.     condition code Z-bit.  This was correct, in that it was what the 68K
  442.     implementation of TextEdit actually tested.  But, MixedMode had a different 
  443.     idea of what returning a boolean in the Z-bit meant.  MixedMode was setting
  444.     the Z-bit the complement of what was wanted.  
  445.     
  446.     Therefore, these ProcPtrs have been changed (back) to return the result in
  447.     register D0.  It turns out that for register based routines, 
  448.     MixedMode sets the Z-bit of the 68K emulator based on the contents 
  449.     of the return result register.  Thus we can get the Z-bit set correctly.  
  450.     
  451.     But, when TextEdit is recoded in PowerPC, if it calls a 68K ClickLoop
  452.     or WordBreak routine, register D0 had better have the result (in addition
  453.     to the Z-bit). Therefore all 68K apps should make sure their ClickLoop or
  454.     WordBreak routines set register D0 at the end.
  455. */
  456. enum {
  457.     uppHighHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseHighHook ),
  458.     uppEOLHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseEOLHook ),
  459.     uppCaretHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseCaretHook ),
  460.     uppWidthHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseWidthHook ),
  461.     uppTextWidthHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTextWidthHook ),
  462.     uppNWidthHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseNWidthHook ),
  463.     uppDrawHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseDrawHook ),
  464.     uppHitTestHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseHitTestHook ),
  465.     uppTEFindWordProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTEFindWord ),
  466.     uppTERecalcProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTERecalc ),
  467.     uppTEDoTextProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTEDoText ),
  468.     uppTEClickLoopProcInfo = kRegisterBased
  469.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  470.          | REGISTER_RESULT_LOCATION(kRegisterD0)
  471.          | REGISTER_ROUTINE_PARAMETER(1, kRegisterA3, SIZE_CODE(sizeof(TEPtr))),
  472.     uppWordBreakProcInfo = kRegisterBased
  473.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  474.          | REGISTER_RESULT_LOCATION(kRegisterD0)
  475.          | REGISTER_ROUTINE_PARAMETER(1, kRegisterA0, SIZE_CODE(sizeof(Ptr)))
  476.          | REGISTER_ROUTINE_PARAMETER(2, kRegisterD0, SIZE_CODE(sizeof(short)))
  477. };
  478.  
  479. #if GENERATINGCFM
  480. #define NewHighHookProc(userRoutine)        \
  481.         (HighHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppHighHookProcInfo, GetCurrentArchitecture())
  482. #define NewEOLHookProc(userRoutine)        \
  483.         (EOLHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppEOLHookProcInfo, GetCurrentArchitecture())
  484. #define NewCaretHookProc(userRoutine)        \
  485.         (CaretHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppCaretHookProcInfo, GetCurrentArchitecture())
  486. #define NewWidthHookProc(userRoutine)        \
  487.         (WidthHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppWidthHookProcInfo, GetCurrentArchitecture())
  488. #define NewTextWidthHookProc(userRoutine)        \
  489.         (TextWidthHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTextWidthHookProcInfo, GetCurrentArchitecture())
  490. #define NewNWidthHookProc(userRoutine)        \
  491.         (NWidthHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppNWidthHookProcInfo, GetCurrentArchitecture())
  492. #define NewDrawHookProc(userRoutine)        \
  493.         (DrawHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDrawHookProcInfo, GetCurrentArchitecture())
  494. #define NewHitTestHookProc(userRoutine)        \
  495.         (HitTestHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppHitTestHookProcInfo, GetCurrentArchitecture())
  496. #define NewTEFindWordProc(userRoutine)        \
  497.         (TEFindWordUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTEFindWordProcInfo, GetCurrentArchitecture())
  498. #define NewTERecalcProc(userRoutine)        \
  499.         (TERecalcUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTERecalcProcInfo, GetCurrentArchitecture())
  500. #define NewTEDoTextProc(userRoutine)        \
  501.         (TEDoTextUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTEDoTextProcInfo, GetCurrentArchitecture())
  502. #define NewTEClickLoopProc(userRoutine)        \
  503.         (TEClickLoopUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTEClickLoopProcInfo, GetCurrentArchitecture())
  504. #define NewWordBreakProc(userRoutine)        \
  505.         (WordBreakUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppWordBreakProcInfo, GetCurrentArchitecture())
  506. #else
  507. #define NewHighHookProc(userRoutine)        \
  508.         ((HighHookUPP) (userRoutine))
  509. #define NewEOLHookProc(userRoutine)        \
  510.         ((EOLHookUPP) (userRoutine))
  511. #define NewCaretHookProc(userRoutine)        \
  512.         ((CaretHookUPP) (userRoutine))
  513. #define NewWidthHookProc(userRoutine)        \
  514.         ((WidthHookUPP) (userRoutine))
  515. #define NewTextWidthHookProc(userRoutine)        \
  516.         ((TextWidthHookUPP) (userRoutine))
  517. #define NewNWidthHookProc(userRoutine)        \
  518.         ((NWidthHookUPP) (userRoutine))
  519. #define NewDrawHookProc(userRoutine)        \
  520.         ((DrawHookUPP) (userRoutine))
  521. #define NewHitTestHookProc(userRoutine)        \
  522.         ((HitTestHookUPP) (userRoutine))
  523. #define NewTEFindWordProc(userRoutine)        \
  524.         ((TEFindWordUPP) (userRoutine))
  525. #define NewTERecalcProc(userRoutine)        \
  526.         ((TERecalcUPP) (userRoutine))
  527. #define NewTEDoTextProc(userRoutine)        \
  528.         ((TEDoTextUPP) (userRoutine))
  529. #define NewTEClickLoopProc(userRoutine)        \
  530.         ((TEClickLoopUPP) (userRoutine))
  531. #define NewWordBreakProc(userRoutine)        \
  532.         ((WordBreakUPP) (userRoutine))
  533. #endif
  534.  
  535. #if GENERATINGCFM
  536. #define CallHighHookProc(userRoutine, r, pTE)        \
  537.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppHighHookProcInfo, (r), (pTE))
  538. #define CallEOLHookProc(userRoutine, theChar, pTE, hTE)        \
  539.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppEOLHookProcInfo, (theChar), (pTE), (hTE))
  540. #define CallCaretHookProc(userRoutine, r, pTE)        \
  541.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppCaretHookProcInfo, (r), (pTE))
  542. #define CallWidthHookProc(userRoutine, textLen, textOffset, textBufferPtr, pTE, hTE)        \
  543.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppWidthHookProcInfo, (textLen), (textOffset), (textBufferPtr), (pTE), (hTE))
  544. #define CallTextWidthHookProc(userRoutine, textLen, textOffset, textBufferPtr, pTE, hTE)        \
  545.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTextWidthHookProcInfo, (textLen), (textOffset), (textBufferPtr), (pTE), (hTE))
  546. #define CallNWidthHookProc(userRoutine, styleRunLen, styleRunOffset, slop, direction, textBufferPtr, lineStart, pTE, hTE)        \
  547.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppNWidthHookProcInfo, (styleRunLen), (styleRunOffset), (slop), (direction), (textBufferPtr), (lineStart), (pTE), (hTE))
  548. #define CallDrawHookProc(userRoutine, textOffset, drawLen, textBufferPtr, pTE, hTE)        \
  549.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDrawHookProcInfo, (textOffset), (drawLen), (textBufferPtr), (pTE), (hTE))
  550. #define CallHitTestHookProc(userRoutine, styleRunLen, styleRunOffset, slop, textBufferPtr, pTE, hTE, pixelWidth, charOffset, pixelInChar)        \
  551.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppHitTestHookProcInfo, (styleRunLen), (styleRunOffset), (slop), (textBufferPtr), (pTE), (hTE), (pixelWidth), (charOffset), (pixelInChar))
  552. #define CallTEFindWordProc(userRoutine, currentPos, caller, pTE, hTE, wordStart, wordEnd)        \
  553.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTEFindWordProcInfo, (currentPos), (caller), (pTE), (hTE), (wordStart), (wordEnd))
  554. #define CallTERecalcProc(userRoutine, pTE, changeLength, lineStart, firstChar, lastChar)        \
  555.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTERecalcProcInfo, (pTE), (changeLength), (lineStart), (firstChar), (lastChar))
  556. #define CallTEDoTextProc(userRoutine, pTE, firstChar, lastChar, selector, currentGrafPort, charPosition)        \
  557.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTEDoTextProcInfo, (pTE), (firstChar), (lastChar), (selector), (currentGrafPort), (charPosition))
  558. #define CallTEClickLoopProc(userRoutine, pTE)        \
  559.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTEClickLoopProcInfo, (pTE))
  560. #define CallWordBreakProc(userRoutine, text, charPos)        \
  561.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppWordBreakProcInfo, (text), (charPos))
  562. #else
  563. /* (*HighHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  564. /* (*EOLHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  565. /* (*CaretHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  566. /* (*WidthHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  567. /* (*TextWidthHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  568. /* (*NWidthHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  569. /* (*DrawHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  570. /* (*HitTestHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  571. /* (*TEFindWordProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  572. /* (*TERecalcProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  573. /* (*TEDoTextProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  574. /* (*TEClickLoopProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  575. /* (*WordBreakProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  576. #endif
  577.  
  578. extern pascal Handle TEScrapHandle( void )
  579.     TWOWORDINLINE( 0x2EB8, 0x0AB4 ); /* MOVE.L $0AB4,(SP) */
  580. #if GENERATINGCFM
  581. extern pascal long TEGetScrapLength(void);
  582. #else
  583. #define TEGetScrapLength() ((long) * (unsigned short *) 0x0AB0)
  584. #endif
  585. extern pascal void TEInit(void)
  586.  ONEWORDINLINE(0xA9CC);
  587. extern pascal TEHandle TENew(const Rect *destRect, const Rect *viewRect)
  588.  ONEWORDINLINE(0xA9D2);
  589. extern pascal void TEDispose(TEHandle hTE)
  590.  ONEWORDINLINE(0xA9CD);
  591. extern pascal void TESetText(const void *text, long length, TEHandle hTE)
  592.  ONEWORDINLINE(0xA9CF);
  593. extern pascal CharsHandle TEGetText(TEHandle hTE)
  594.  ONEWORDINLINE(0xA9CB);
  595. extern pascal void TEIdle(TEHandle hTE)
  596.  ONEWORDINLINE(0xA9DA);
  597. extern pascal void TESetSelect(long selStart, long selEnd, TEHandle hTE)
  598.  ONEWORDINLINE(0xA9D1);
  599. extern pascal void TEActivate(TEHandle hTE)
  600.  ONEWORDINLINE(0xA9D8);
  601. extern pascal void TEDeactivate(TEHandle hTE)
  602.  ONEWORDINLINE(0xA9D9);
  603. extern pascal void TEKey(short key, TEHandle hTE)
  604.  ONEWORDINLINE(0xA9DC);
  605. extern pascal void TECut(TEHandle hTE)
  606.  ONEWORDINLINE(0xA9D6);
  607. extern pascal void TECopy(TEHandle hTE)
  608.  ONEWORDINLINE(0xA9D5);
  609. extern pascal void TEPaste(TEHandle hTE)
  610.  ONEWORDINLINE(0xA9DB);
  611. extern pascal void TEDelete(TEHandle hTE)
  612.  ONEWORDINLINE(0xA9D7);
  613. extern pascal void TEInsert(const void *text, long length, TEHandle hTE)
  614.  ONEWORDINLINE(0xA9DE);
  615. extern pascal void TESetAlignment(short just, TEHandle hTE)
  616.  ONEWORDINLINE(0xA9DF);
  617. extern pascal void TEUpdate(const Rect *rUpdate, TEHandle hTE)
  618.  ONEWORDINLINE(0xA9D3);
  619. extern pascal void TETextBox(const void *text, long length, const Rect *box, short just)
  620.  ONEWORDINLINE(0xA9CE);
  621. extern pascal void TEScroll(short dh, short dv, TEHandle hTE)
  622.  ONEWORDINLINE(0xA9DD);
  623. extern pascal void TESelView(TEHandle hTE)
  624.  ONEWORDINLINE(0xA811);
  625. extern pascal void TEPinScroll(short dh, short dv, TEHandle hTE)
  626.  ONEWORDINLINE(0xA812);
  627. extern pascal void TEAutoView(Boolean fAuto, TEHandle hTE)
  628.  ONEWORDINLINE(0xA813);
  629. extern pascal void TECalText(TEHandle hTE)
  630.  ONEWORDINLINE(0xA9D0);
  631. extern pascal short TEGetOffset(Point pt, TEHandle hTE)
  632.  ONEWORDINLINE(0xA83C);
  633. extern pascal Point TEGetPoint(short offset, TEHandle hTE)
  634.  THREEWORDINLINE(0x3F3C, 0x0008, 0xA83D);
  635. extern pascal void TEClick(Point pt, Boolean fExtend, TEHandle h)
  636.  ONEWORDINLINE(0xA9D4);
  637. extern pascal TEHandle TEStyleNew(const Rect *destRect, const Rect *viewRect)
  638.  ONEWORDINLINE(0xA83E);
  639. extern pascal void TESetStyleHandle(TEStyleHandle theHandle, TEHandle hTE)
  640.  THREEWORDINLINE(0x3F3C, 0x0005, 0xA83D);
  641. extern pascal TEStyleHandle TEGetStyleHandle(TEHandle hTE)
  642.  THREEWORDINLINE(0x3F3C, 0x0004, 0xA83D);
  643. extern pascal void TEGetStyle(short offset, TextStyle *theStyle, short *lineHeight, short *fontAscent, TEHandle hTE)
  644.  THREEWORDINLINE(0x3F3C, 0x0003, 0xA83D);
  645. extern pascal void TEStylePaste(TEHandle hTE)
  646.  THREEWORDINLINE(0x3F3C, 0x0000, 0xA83D);
  647. extern pascal void TESetStyle(short mode, const TextStyle *newStyle, Boolean fRedraw, TEHandle hTE)
  648.  THREEWORDINLINE(0x3F3C, 0x0001, 0xA83D);
  649. extern pascal void TEReplaceStyle(short mode, const TextStyle *oldStyle, const TextStyle *newStyle, Boolean fRedraw, TEHandle hTE)
  650.  THREEWORDINLINE(0x3F3C, 0x0002, 0xA83D);
  651. extern pascal StScrpHandle TEGetStyleScrapHandle(TEHandle hTE)
  652.  THREEWORDINLINE(0x3F3C, 0x0006, 0xA83D);
  653. extern pascal void TEStyleInsert(const void *text, long length, StScrpHandle hST, TEHandle hTE)
  654.  THREEWORDINLINE(0x3F3C, 0x0007, 0xA83D);
  655. extern pascal long TEGetHeight(long endLine, long startLine, TEHandle hTE)
  656.  THREEWORDINLINE(0x3F3C, 0x0009, 0xA83D);
  657. extern pascal Boolean TEContinuousStyle(short *mode, TextStyle *aStyle, TEHandle hTE)
  658.  THREEWORDINLINE(0x3F3C, 0x000A, 0xA83D);
  659. extern pascal void TEUseStyleScrap(long rangeStart, long rangeEnd, StScrpHandle newStyles, Boolean fRedraw, TEHandle hTE)
  660.  THREEWORDINLINE(0x3F3C, 0x000B, 0xA83D);
  661. extern pascal void TECustomHook(TEIntHook which, UniversalProcPtr *addr, TEHandle hTE)
  662.  THREEWORDINLINE(0x3F3C, 0x000C, 0xA83D);
  663. extern pascal long TENumStyles(long rangeStart, long rangeEnd, TEHandle hTE)
  664.  THREEWORDINLINE(0x3F3C, 0x000D, 0xA83D);
  665. extern pascal short TEFeatureFlag(short feature, short action, TEHandle hTE)
  666.  THREEWORDINLINE(0x3F3C, 0x000E, 0xA83D);
  667. extern pascal OSErr TEGetHiliteRgn(RgnHandle region, TEHandle hTE)
  668.  THREEWORDINLINE(0x3F3C, 0x000F, 0xA83D);
  669. extern pascal void TESetScrapLength(long length);
  670. extern pascal OSErr TEFromScrap(void);
  671. extern pascal OSErr TEToScrap(void);
  672. extern pascal void TESetClickLoop(TEClickLoopUPP clikProc, TEHandle hTE);
  673. extern pascal void TESetWordBreak(WordBreakUPP wBrkProc, TEHandle hTE);
  674. #if CGLUESUPPORTED
  675. extern void teclick(Point *pt, Boolean fExtend, TEHandle h);
  676. #endif
  677. #if OLDROUTINENAMES
  678. #define TESetJust(just, hTE) TESetAlignment(just, hTE)
  679. #define TextBox(text, length, box, just) TETextBox(text, length, box, just)
  680. #define TEStylNew(destRect, viewRect) TEStyleNew(destRect, viewRect)
  681. #define SetStylHandle(theHandle, hTE) TESetStyleHandle(theHandle, hTE)
  682. #define SetStyleHandle(theHandle, hTE) TESetStyleHandle (theHandle, hTE)
  683. #define GetStylHandle(hTE) TEGetStyleHandle(hTE)
  684. #define GetStyleHandle(hTE) TEGetStyleHandle(hTE)
  685. #define TEStylPaste(hTE) TEStylePaste(hTE)
  686. #define GetStylScrap(hTE) TEGetStyleScrapHandle(hTE)
  687. #define GetStyleScrap(hTE) TEGetStyleScrapHandle(hTE)
  688. #define SetStylScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)  \
  689.     TEUseStyleScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)
  690. #define SetStyleScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)  \
  691.     TEUseStyleScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)
  692. #define TEStylInsert(text, length, hST, hTE) TEStyleInsert(text, length, hST, hTE)
  693. #define TESetScrapLen(length) TESetScrapLength(length)
  694. #define TEGetScrapLen() TEGetScrapLength()
  695. #define SetClikLoop(clikProc, hTE) TESetClickLoop(clikProc, hTE)
  696. #define SetWordBreak(wBrkProc, hTE) TESetWordBreak(wBrkProc, hTE)
  697. #endif
  698.  
  699. #ifdef __CFM68K__
  700. #pragma lib_export off
  701. #endif
  702.  
  703. #if GENERATINGPOWERPC
  704. #pragma options align=reset
  705. #endif
  706.  
  707. #ifdef __cplusplus
  708. }
  709. #endif
  710.  
  711. #endif /* __TEXTEDIT__ */
  712.